// pages/home/home.js
const app = getApp()

Page({
  /**
   * 页面的初始数据
   */
  data: {
    userInfo: app.globalData.userInfo,
    grade: app.globalData.grade,
    plan: app.globalData.plan
  },

  /**
   * 获取用户信息并保存到数据库
   */
  getprofile() {
    console.log('开始执行 getprofile 方法');
    wx.login({
      success: loginRes => {
        console.log('wx.login 成功，loginRes:', loginRes);
        if (loginRes.code) {
          // 成功获取 code，调用云函数 login 获取 openid
          wx.cloud.callFunction({
            name: 'login',
            data: {
              code: loginRes.code
            },
            success: loginResult => {
              console.log('调用云函数 login 成功，loginResult:', loginResult);
              // 从云函数获取 openid
              const openid = loginResult.result.openid;
              console.log('获取到的 openid:', openid);
              app.globalData.userInfo.openid = openid;

              const db = wx.cloud.database();

              // 先查询是否存在该 openid 在 user 表中
              db.collection('user').where({
                _openid: openid
              }).get({
                success: res => {
                  console.log('查询 user 表成功，res:', res);
                  console.log('sb');
                  if (res.data.length > 0) {
                    // 已存在该 openid，更新全局 userInfo
                    console.log('用户已存在，无需重复添加111');
                    console.log('查询 user 表成功，res:', res);
                    const existingUser = res.data[0];
                    console.log('同步前的 userInfo:', existingUser);

                    if (existingUser) {
                      // 同步数据库中的数据到全局变量
                      app.globalData.userInfo.nickname = existingUser.nickname || app.globalData.userInfo.nickname;
                      app.globalData.userInfo.avatarUrl = existingUser.avatarUrl || app.globalData.userInfo.avatarUrl;
                      app.globalData.userInfo.totaltime = existingUser.totaltime || 0;
                      app.globalData.userInfo.totalexe = existingUser.totalexe || 0;

                      // 更新页面数据
                      this.setData({
                        userInfo: app.globalData.userInfo
                      });

                      console.log('同步后的 userInfo:', app.globalData.userInfo);
                    } else {
                      console.error('existingUser 未定义');
                      wx.showToast({
                        title: '用户数据异常，请稍后再试',
                        icon: 'none'
                      });
                    }
                  } 

                  else {
                    // 不存在该 openid，进行添加
                    console.log('用户不存在，开始添加新用户');
                    db.collection('user').add({
                      data: {
                        openid: app.globalData.userInfo.openid,
                        nickname: app.globalData.userInfo.nickname,
                        avatarUrl: app.globalData.userInfo.avatarUrl,
                        totaltime: 0, // 初始化 totaltime
                        totalexe: 0   // 初始化 totalexe
                      },
                      success: res => {
                        console.log('用户信息保存成功', res);
                        wx.showToast({
                          title: '用户信息保存成功',
                          icon: 'success'
                        });
                      },
                      fail: err => {
                        console.error('用户信息保存失败', err);
                        wx.showToast({
                          title: '保存失败，请稍后再试',
                          icon: 'none'
                        });
                      }
                    });
                  }

                  this.handlePlanData(openid);
                },
                fail: err => {
                  console.error('查询用户信息失败', err);
                  wx.showToast({
                    title: '查询失败，请稍后再试',
                    icon: 'none'
                  });
                }
              });
            },
            fail: error => {
              console.error('获取 openid 失败:', error);
              wx.showToast({
                title: '获取身份信息失败，请稍后再试',
                icon: 'none'
              });
            }
          });
        } else {
          console.log('wx.login 失败！' + loginRes.errMsg);
          wx.showToast({
            title: '登录失败，请重试',
            icon: 'none'
          });
        }
      },
      fail: error => {
        console.error('wx.login 调用失败', error);
        wx.showToast({
          title: '登录失败，请检查网络',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 处理 plan 表的数据同步
   * @param {string} openid - 用户的 openid
   */
  handlePlanData(openid) {
    console.log('开始处理 plan 数据，同步 openid:', openid);
    const db = wx.cloud.database();

    // 查询 plan 表中是否存在该 openid
    db.collection('plan').where({
      _openid: openid
    }).get({
      success: res => {
        console.log('查询 plan 表成功，res:', res);
        if (res.data.length > 0) {
          // 已存在该 openid，更新全局 grade 和 plan
          console.log('plan 已存在，无需重复添加');
          const existingPlan = res.data[0];
          console.log('同步前的 plan:', existingPlan);

          if (existingPlan) {
            // 同步数据库中的 input_grade 和 input_plan 到全局变量
            app.globalData.grade = existingPlan.input_grade || app.globalData.grade;
            app.globalData.plan = existingPlan.input_plan || app.globalData.plan;

            // 更新页面数据
            this.setData({
              userInfo: app.globalData.userInfo,
              grade: app.globalData.grade,
              plan: app.globalData.plan
            });

            console.log('同步后的 grade 和 plan:', app.globalData.grade, app.globalData.plan);
          } else {
            console.error('existingPlan 未定义');
            wx.showToast({
              title: '计划数据异常，请稍后再试',
              icon: 'none'
            });
          }
        } else {
          // 不存在该 openid，进行添加
          console.log('plan 不存在，开始添加新计划');
          db.collection('plan').add({
            data: {
              _openid: openid,
              input_grade: app.globalData.grade,
              input_plan: app.globalData.plan
            },
            success: res => {
              console.log('plan 信息保存成功', res);
              wx.showToast({
                title: '计划信息保存成功',
                icon: 'success'
              });
            },
            fail: err => {
              console.error('plan 信息保存失败', err);
              wx.showToast({
                title: '保存计划失败，请稍后再试',
                icon: 'none'
              });
            }
          });
        }
      },
      fail: err => {
        console.error('查询 plan 信息失败', err);
        wx.showToast({
          title: '查询计划失败，请稍后再试',
          icon: 'none'
        });
      }
    });
  },

  onReady() {
    // 页面初次渲染完成
    console.log('页面初次渲染完成');
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 页面显示时更新 userInfo
    console.log('页面显示，更新 userInfo');
    this.setData({
      userInfo: app.globalData.userInfo,
      grade: app.globalData.grade,
      plan: app.globalData.plan
    });
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    // 页面隐藏时
    console.log('页面隐藏');
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    // 页面卸载时
    console.log('页面卸载');
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    // 处理下拉刷新
    console.log('用户触发下拉刷新');
    this.getprofile(); // 重新获取用户信息
    wx.stopPullDownRefresh(); // 停止下拉刷新
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    // 处理上拉触底
    console.log('用户触发上拉触底');
    // 您可以在这里加载更多数据
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    // 处理分享
    console.log('用户点击分享');
    return {
      title: '分享标题',
      path: '/pages/home/home',
      imageUrl: '/images/share.png' // 可选
    };
  }
});